
package com.ee.cybertron.energon.util;

import com.icesoft.faces.component.ext.HtmlInputSecret;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
//import cr.ac.ucr.sigecu.vistas.VistaNavegacion;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;

/**
 *
 * @author jonnathan
 */
public class Main {

    private static Main INSTANCE = null;
    private static String sistema = "PEP";

    // Private constructor suppresses
    private Main() {
    }

    // creador sincronizado para protegerse de posibles problemas  multi-hilo
    // otra prueba para evitar instanciación múltiple
    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new Main();
        }
    }

    public static Main getInstance() {
        if (INSTANCE == null) {
            createInstance();
        }
        return INSTANCE;
    }

    /**
     * Get parameter value from request scope.
     *
     * @param name the name of the parameter
     * @return the parameter value
     */
    public static String getRequestParameter(String name) {
        return (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(name);
    }
/**
 * establece el valor de cualquier componente de html a traves del nombre y el key_componente, el valor por param
 * @param nombre nombre del componente
 * @param focus setea el focus al componente si es necesario
 * @param param valor que desea insertar
 */
    public static void setValorComponente(String nombre,String key_componente,boolean focus, Object... param) {
        FacesContext.getCurrentInstance().getViewRoot().findComponent(nombre).getAttributes().put(key_componente, param[0]);
        if(focus)
        setfocusComponente(nombre);
    }
/**
 * Establece el focus al componente por medio del id
 * @param nombre id del componente
 */
    public static void setfocusComponente(String nombre) {
        String tipo = FacesContext.getCurrentInstance().getViewRoot().findComponent(nombre).getClass().getName();
        if (tipo.equals("com.icesoft.faces.component.ext.HtmlInputText")) {
            HtmlInputText input = (HtmlInputText) FacesContext.getCurrentInstance().getViewRoot().findComponent(nombre);
            input.requestFocus();

        }
        if (tipo.equals("com.icesoft.faces.component.ext.HtmlInputSecret")) {
            HtmlInputSecret input = (HtmlInputSecret) FacesContext.getCurrentInstance().getViewRoot().findComponent(nombre);
            input.requestFocus();
        }
        if (tipo.equals("com.icesoft.faces.component.ext.HtmlInputTextarea")) {
            HtmlInputTextarea input = (HtmlInputTextarea) FacesContext.getCurrentInstance().getViewRoot().findComponent(nombre);
            input.requestFocus();
        }

    }
   /*obtener valor del archivo de etiquetas_es*/
   public static synchronized String getEtiquetas(String etiqueta) {
        ResourceBundle resources;
        String bundle="cr.ac.ucr.sigecu.vistas.util.etiquetas_es";
        try {
            resources = ResourceBundle.getBundle(bundle);
        } catch (MissingResourceException x) {

            throw new InternalError(x.getMessage());
        }
        return resources.getString(etiqueta);
    }


/**
 * devuelve una fecha segun el patron que se le envie
 * @param patron
 * @param fecha
 * @return
 */
    public static String obtenerFecha(String patron, Calendar fecha) {
        String output;
        String pattern = patron;
        SimpleDateFormat formatter;
        formatter = new SimpleDateFormat(pattern, new Locale("es", "CR"));
        output = formatter.format(fecha.getTime());
        return output;
    }
/**
 * devuelve la vista que desea
 * @param expr nombre de la vista
 * @return
 */
    public static Object obtenerVista(String expr) {
        FacesContext context = FacesContext.getCurrentInstance();
        ValueBinding binding =
                context.getApplication().createValueBinding(expr);
        return binding.getValue(context);
    }

    /**
     * remueve la vista de la sesión
     * @param vista_nombre
     */
    public static void removerVistaSesion(String vista_nombre){
        FacesContext context = FacesContext.getCurrentInstance();
        context.getExternalContext().getSessionMap().remove(vista_nombre);
    }



    /**
     * Devuelve la fecha actual del sistema.
     * @return java.util.Date con la fecha actual
     * @since 17/08/2009
     */
    public static Date getFechaActual() {
        return GregorianCalendar.getInstance(new Locale("es", "CR")).getTime();
    } //getFechaActual


    public static String getSistema() {
        return sistema;
    }

//    public static void navegar(String direccion){
//        VistaNavegacion navegar= (VistaNavegacion) obtenerVista("#{vistaNavegacion}");
//        navegar.navegacionBotones(direccion);
//    }
}